package strategy

// Tick 数据结构
type TickData struct {
	// 交易日
	TradingDay string
	// 合约代码
	InstrumentID string 
	// 交易所代码
	ExchangeID string
	// 最新价
	LastPrice float64
	// 今开盘
	OpenPrice float64
	// 最高价
	HighestPrice float64
	// 最低价
	LowestPrice float64
	// 数量
	Volume int
	// 成交金额
	Turnover float64
	// 持仓量
	OpenInterest float64
	// 本次结算价
	SettlementPrice float64
	// 涨停板价
	UpperLimitPrice float64
	// 跌停板价
	LowerLimitPrice float64
	// 最后修改时间
	UpdateTime string 
	// 最后修改毫秒
	UpdateMillisec int
	// 申买价一
	BidPrice1 float64
	// 申买量一
	BidVolume1 int
	// 申卖价一
	AskPrice1 float64
	// 申卖量一
	AskVolume1 int
	// 当日均价
	AveragePrice float64
}

// Bar 数据结构
type BarData struct {
	DateTime     string
	InstrumentID string
	Open         float64
	High         float64
	Low          float64
	Close        float64
	Volume       int
	OpenInterest float64
	PreVol       int
}

// 策略信号
type StraSignal struct {
	StraID        string
	Symbol        string
	OpenCloseFlag int
	LongShortFlag int
	Price         float64
	Volume        int
	Datetime      string // yyyy-mm-dd hh:mm:ss
	Describe      string
}

// 参数结构
type Param struct {
	Name        string
	Default     int
	Min         int
	Max         int
	Step        int
	Multiplier  int
	Description string
}

type PriceType float64
type PricesType []float64

func (p PricesType) Ref(n int) float64 {
	dl := len(p)
	if n >= dl {
		return p[0]

	} else if n > 0 {
		return p[dl-n]
	} else if n <= -dl {
		return p[dl-1]
	}
	return p[-n]
}
